iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 16
0
自我挑戰組

30 天的 ShellScript 教室解決開發者的困擾系列 第 16

[鐵人賽第16天] 正規表達的使用

  • 分享至 

  • xImage
  •  

正規表達式 Regular Expression ,早出現在 Perl 語言裡面,但是因為太好用所以即使不寫 Perl 也會遇到他,像是:

上面提到 sedgrep 可以吃一些的正規表達,以下我們來講講一些常用的正規表達字元吧:

  • ^ :表示一行的最開頭,像是 ^function 就只會找出那些一開頭就有 function 的內容。
  • $ :表示一行的最尾,像是 ;$ 表示過濾出分號結尾的那幾行。
  • [] :用 [] 包起來的字元,表示裡面的字元任選一個,像是 [aA]ction 就可以找出 action 或是 Action
  • [^][] 包起來多一個 ^ 就表示排除,像是 [^D]uration 就會找出 duration
  • . :這個 . 代表任意一個字元,像是 ..t 可以找出 cat 、 pet 等等。
  • * :這個 * 與丙級檢定裡面的 * 完全不同,他表示前面的字元可以重複無限個(也可以沒有),像是 ap*le 可以找出 ale 、 aple 、 apple 、 appple等等。

grep 指令在第九天就稍微介紹過了,所以有興趣的請參考一下鐵人賽第九天的文章

今天就來介紹一下 sed 跟正規表達搭配起來的用法吧, sed 的可以用正規表達來做搜尋取代,語法如下:

sed "s/搜尋/取代/g"

其中搜尋的部分當然可以用正規表達,而取代的部分假如你只是要加入字串,可以用 & 號把原本選起來字串保留下來,像是這樣(第一行寫兩次原本的搜尋條件,第二行則是用 & 號:

#sed "s/<div class=\"/<div class=\"items /g"
sed "s/<div class=\"/&items /g"

這樣就可以把所有的 div 加上 items 這個 class。

還有像有時候換行前塞了一堆空白,看不到但是又覺得不順眼,這時候就可以用以下的指令把指令最後面的空白全部拔掉:

sed "s/\ *$//g"

目前常用的 sed 就到這裡了,不過 sed 預設會把資料輸出到 stdout ,如果要直接修改檔案呢?

sed -i "s/\ *$//g"

目前常用的 sed 指令大概就到這邊啦。


我是誰?
我是 dd-han ,可以叫我呆翰,是國立臺中科技大學的延畢生 與 創科資訊的時習生。


上一篇
[鐵人賽第15天] 使用 while 迴圈
下一篇
[鐵人賽第17天] find 指令的使用
系列文
30 天的 ShellScript 教室解決開發者的困擾23
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言